home *** CD-ROM | disk | FTP | other *** search
/ F1 Licenseware / F1 Licenseware - Volume 1.iso / disks / 003.dms / 003.adf / TEXT / chapter15.txt < prev    next >
Text File  |  1992-09-02  |  9KB  |  249 lines

  1.  
  2.               The Absolute Beginners Guide To Amos
  3.               -------------------------------------
  4.                          Chapter fifteen
  5.                          ---------------
  6.  
  7. Now I would like to show you an easy way to detect mouse selections.
  8. There are quite a few ways to set up menus that use the mouse but as we
  9. are trying to learn the basics I will show you the simplest way I could
  10. think of.  It`s not the best way but it is straight forward and neat.
  11.  
  12. If you have already looked at EXAMPLE15.Amos you will se how this system
  13. works:
  14.  
  15. 1) We first draw some boxes for our text onto the screen
  16. 2) We then detect if the user has pressed a mouse key
  17. 3) Act on the mouse click 
  18. 4) If inside a box perform the related task.
  19. 5) If outside a box then goto 2)
  20.  
  21. That is a broad outline of the program I will now go through the program
  22. line for line.
  23.  
  24.  
  25. SCREEN OPEN 0,640,200,8,HIRES
  26. -----------------------------
  27. Open a custom screen, simply because it looks nice and gives more room for 
  28. text operations and the like.
  29.  
  30. CHANGE MOUSE 2: PAPER 6: CURS OFF: CLS 6
  31. ----------------------------------------
  32. Set the mouse pointer to a cross hair and switch the text cursor off, set
  33. text paper to the same as the background screen colour (6) a nice blue.
  34.  
  35. UNDER ON
  36. --------
  37. A new command but nice and straight forward.  This simply sets underlined 
  38. text to ON, so any text PRINTed from now on will automatically be UNDERlined,
  39. at least until Amos comes to an UNDER OFF statement.
  40.  
  41. CENTRE "Move the mouse pointer over a box and click left button"
  42. ----------------------------------------------------------------
  43. Centralize the forthcoming string of text (This will be underlined as well) 
  44.  
  45. Note: As we haven`t set the text cursor to any position yet in this program
  46.       this text will be on line 0.
  47.  
  48. UNDER OFF
  49. ---------
  50. Now turn UNDERlining OFF.
  51.  
  52.  
  53. RESERVE ZONE 4
  54. --------------
  55. We will want four menu boxes in this example so we have to reserve space for
  56. them using RESERVE ZONE.  Don`t worry why at this stage just remember that
  57. the menus will not work without this command first.
  58.  
  59.  
  60. LOCATE 20,10: PRINT BORDER$(ZONE$("BOX 1",1),1)
  61. -----------------------------------------------
  62. WE know what the LOCATE and PRINT do.  The rest of the line is as follows,
  63.  
  64.  
  65. BORDER$(ZONE$(
  66. ---------------
  67. Is always the same (you can leave border$ out if you want)
  68.  
  69. "BOX 1"
  70. -------
  71. This is the text you wish to be displayed inside the menu box, in quotes.
  72.  
  73. ,1),1)
  74. ------
  75. The first number is the menu I.D for our use (1) and the second 1 is the type
  76. of border pattern we want around the box, ranges are 1 to 16 try out some
  77. different patterns in EXAMPLE15.Amo.  If you don`t want borders around your
  78. text then delete the first bracket and the ,1) at the end.
  79.  
  80.  
  81. The next three lines are virtually the same except for the text and I.D 
  82. number.
  83.  
  84.  
  85. KEE:
  86. ----
  87. This is a label for GOTO to jump to.  See last line of program.
  88.  
  89.  
  90. WHILE MOUSE KEY=0: WEND
  91. -----------------------
  92. This excellent and useful little line continually loops until a mouse key is
  93. pressed where upon the program continues.  It is very similar to the WAIT KEY
  94. command we have been using but instead uses any mouse button. 
  95.  
  96. Make a note for use in your future programs.  The WHILE WEND loop, as it is
  97. known, will repeat anything inside the WHILE and WEND commands repeatedly
  98. until a condition is met, in this case a mouse button click.  WHILE can be 
  99. proceeded by as many commands as you need.
  100.  
  101.  
  102.  
  103. KK=MOUSE ZONE
  104. -------------
  105. Really we do not need this line.  What it does is tells the variable KK to 
  106. hold the current zone number the mouse pointer is over.  If the mouse is not
  107. over any zone at all the value of kk (and mouse zone) will be zero.
  108. We will see why it`s not totally necessary in a moment. 
  109.  
  110.  
  111. LOCATE 0,20
  112. -----------
  113. Set the text cursor to 0 across 20 down, ready for PRINTing to.
  114.  
  115.  
  116. IF KK=1 THEN CENTRE "YOU SELECTED BOX 1"
  117. ----------------------------------------
  118. We could also have used IF MOUSE ZONE=1 but KK is quicker and neater to use.
  119. So if KK=1 (the zone the mouse pointer has been clicked over) THEN PRINT etc.
  120.  
  121. The following two lines are similar except for the text in the quotes.
  122.  
  123. IF KK=4 THEN CENTRE "YOU SELECTED EXIT": WAIT 50: EDIT
  124. ------------------------------------------------------
  125. We have used box 4 as an exit to the program, WAIT enough time for the user
  126. to read the message then goto EDIT mode.
  127.  
  128.  
  129. GOTO KEE
  130. --------
  131. The mouse key was pressed but KK was not equal to 1,2,3 or 4 so no box was
  132. clicked on (KK equal to 0) so we jump back to start checking all over again.
  133.  
  134. I won`t spend any more time on this as EXAMPLE15.Amos will make it all clear.
  135.  
  136. Spend a little time with this program and you could knock up some neat little
  137. menus.  How about a background picture with the boxes overlaid? Remember that
  138. when you use a picture the palette will change the system colours.
  139. By the way if you load a picture of a different size to a screen you have
  140. previously opened then Amos will change the size of the screen accordingly
  141. for you, so for example if you did this,
  142.  
  143. SCREEN OPEN 0,640,256,8,hires
  144.  
  145. Then you loaded a picture which was Lowres 320X200 then Amos would scrap
  146. your hires screen for the dimensions of the newly loaded picture.
  147. You can get round this by loading the picture into a spare screen and using
  148. the SCREEN command to display it,
  149.  
  150. SCREEN OPEN 0,640,256,8,hires
  151. SCREEN OPEN 1,320,200,16,lowres
  152. LOAD IFF :picname",1
  153.  
  154. The picture will then be displayed on screen 1 and when you wish to use 
  155. screen 0 (your hires screen) you just use the command SCREEN 0.
  156.  
  157.  
  158. The menu  program was good as far as simplicity goes but using a similar
  159. method with a few more commands we could make this menu system much more
  160. flexible and neater take a look at EXAMPLE15_1.Amos it`s quite an improvement
  161. don`t you think?
  162.  
  163. As there are only a few commands we haven`t covered in EXAMPLE15_1.Amos and 
  164. as it is highly REMmed I will just explain the new commands.
  165.  
  166.  
  167. SET ZONE
  168. -------
  169. After using RESERVE ZONE we have to tell Amos exactly in coordinates where
  170. the top left and bottom right corners of each of our selection boxes are.
  171. In the prevoius example using ZONE$ Amos did this for us.
  172.  
  173. As the coordinates are hardware coordinates this is a pain so on this disk
  174. in the EXTRAS drawer you will find a program I wrote years ago called 
  175. GETZONE.Amos It will allow you to load an IFF picture or ABK SPACKED picture
  176. of any size you then click once on the top right corner of a menu box and 
  177. then the bottom right corner the hardware coordinates will then be displayed
  178. for you to write down, press a mouse key and you can do your next menu and so
  179. on. 
  180.  
  181. The good thing about this new menu system we are going to use is you are not
  182. limited to a box for your menu in fact it can be any rectangular shape or 
  183. size, within reason of course.
  184.  
  185. OK so we know our coordinates, we now need to let Amos know them too.
  186. This is where SET ZONE comes in to it.  In EXAMPLE15_1.Amos we have three 
  187. menu options so we need to set three zones 1 to 3 these will be the I.D 
  188. numbers for our menus throughout the program.
  189.  
  190. SET ZONE 1,                    The menu I.D
  191.  
  192. SET ZONE 1, 256,93 TO          And coordinates of the top left edge of menu
  193.  
  194. SET ZONE 1, 256,93 TO 362,104  And the second set, bottom left coordinates
  195.   
  196. And that is it now just insert the rest of your coordinates like this,
  197.  
  198. SET ZONE 2,256,109 TO 362,109   
  199. etc.
  200.  
  201.  
  202. Note: If like in the example program you are unpacking a screen then make 
  203. sure you unpack the screen BEFORE SETting ZONEs as they will be cleared.
  204.  
  205.  
  206. There are two more commands we have not covered from EXAMPLE15_1.Amos
  207. these are,
  208.  
  209. GOSUB
  210.  
  211. and
  212.  
  213. RETURN
  214.  
  215. These two commands are related, You GOSUB to a routine and then RETURN from
  216. it when completed.
  217.  
  218. GOSUB is almost the same as GOTO but has one extra powerful feature the 
  219. RETURN part, here is an example,
  220.  
  221.  
  222. GOSUB F1
  223. PRINT "I`VE BEEN TO F1"
  224. STOP
  225.  
  226.  
  227. F1:
  228. PRINT "I am now in a subroutine"
  229. RETURN
  230.  
  231.  
  232. The program goes to the part of the program labelled F1: and executes 
  233. commands until it reaches a RETURN instruction, and this is the good part, 
  234. the program then continues from the instruction immediately after the GOSUB 
  235. call.  So what! You may say, what use is that? Well what if we wanted to 
  236. execute the same routine lots of times during a program we just call it with
  237. GOSUB then continue executing from after the gosub as if nothing happened.
  238.  
  239. In Amos the GOSUB has taken a bit of a backseat because of a command called
  240. PROCEDURE and we will be covering that subject very soon, but now you know
  241. about GOTO and GOSUB PROCEDURE will be a lot easier to understand.
  242. For a good example of GOSUB check out Example15_1.Amos.
  243.  
  244.  
  245. End of chapter fifteen.  
  246.  
  247.  
  248.  
  249.